#ifndef CIRCULARLY_LINKED_LIST_H
#define CIRCULARLY_LINKED_LIST_H

#include "l_list.h"

typedef ll_node cll_node;

typedef cll_node * cl_list;
typedef cll_node const * const_cl_list;
typedef cll_node * cll_iterator;
typedef cll_node const * const_cll_iterator;

#define cll_node_create ll_node_create
#define cll_node_release ll_node_release

cl_list cl_list_clone(const_cl_list l);
void cl_list_release(cl_list l);

size_t cl_list_len(const_cl_list l);

#define cl_list_empty(l) (l)

cl_list cl_list_append(cl_list * l, elem_t * p, size_t len);

void cl_list_display(const_cl_list l);

int cl_list_get(const_cl_list l, index_t i, elem_t * e);
index_t cl_list_locate(const_cl_list l, elem_t e);

#define cl_list_insert l_list_insert
//ll_iterator cl_list_insert(cll_iterator it, elem_t e);

//ll_iterator cl_list_delete(cll_iterator prev, elem_t * e);

l_list cl_list_reverse(cl_list * l);


#endif /* CIRCULARLY_LINKED_LIST_H */

